package com.baize.ttglinkad;

import android.app.Activity;
import android.app.Application;
import android.content.Context;

import com.baize.glinkad.bean.listener.ADListener;
import com.baize.glinkad.bean.listener.RewardVideoCallBack;
import com.baize.glinkad.bean.listener.RewardVideoListener;
import com.baize.glinkad.manager.ADManager;
import com.baize.glinkad.utils.ADLogHelper;
import com.bytedance.sdk.openadsdk.AdSlot;
import com.bytedance.sdk.openadsdk.TTAdConfig;
import com.bytedance.sdk.openadsdk.TTAdConstant;
import com.bytedance.sdk.openadsdk.TTAdNative;
import com.bytedance.sdk.openadsdk.TTAdSdk;
import com.bytedance.sdk.openadsdk.TTAppDownloadListener;
import com.bytedance.sdk.openadsdk.TTRewardVideoAd;


public class TTADManager extends ADManager {

    private ADListener aDListener;

    private RewardVideoCallBack rewardVideoCallBack;

    private TTRewardVideoAd mttRewardVideoAd;

    private Activity mActivity;

    @Override
    public void initApplication(Application application) {
        //强烈建议在应用对应的Application#onCreate()方法中调用，避免出现content为null的异常
        TTAdSdk.init(application,
                new TTAdConfig.Builder()
                        .appId("5187277")
                        .useTextureView(true) //默认使用SurfaceView播放视频广告,当有SurfaceView冲突的场景，可以使用TextureView
                        .appName("江个湖")
                        .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)//落地页主题
                        .allowShowNotify(true) //是否允许sdk展示通知栏提示
                        .debug(true) //测试阶段打开，可以通过日志排查问题，上线时去除该调用
                        .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) //允许直接下载的网络状态集合,没有设置的网络下点击下载apk会有二次确认弹窗，弹窗中会披露应用信息
                        .supportMultiProcess(false) //是否支持多进程，true支持
                        .asyncInit(true) //是否异步初始化sdk,设置为true可以减少SDK初始化耗时。3450版本开始废弃~~
                //.httpStack(new MyOkStack3())//自定义网络库，demo中给出了okhttp3版本的样例，其余请自行开发或者咨询工作人员。
                .build());
        //如果明确某个进程不会使用到广告SDK，可以只针对特定进程初始化广告SDK的content
        //if (PROCESS_NAME_XXXX.equals(processName)) {
        //   TTAdSdk.init(context, config);
        //}
    }

    @Override
    public void init(Context context, ADListener aDListener) {
        this.mActivity = (Activity) context;
        this.aDListener = aDListener;
        TTAdSdk.init(context, new TTAdConfig.Builder()
                .appId("5187277")
                .useTextureView(true) //默认使用SurfaceView播放视频广告,当有SurfaceView冲突的场景，可以使用TextureView
                .appName("江个湖")
                .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)//落地页主题
                .allowShowNotify(true) //是否允许sdk展示通知栏提示
                .debug(true) //测试阶段打开，可以通过日志排查问题，上线时去除该调用
                .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI) //允许直接下载的网络状态集合,没有设置的网络下点击下载apk会有二次确认弹窗，弹窗中会披露应用信息
                .supportMultiProcess(false) //是否支持多进程，true支持
                .asyncInit(true) //是否异步初始化sdk,设置为true可以减少SDK初始化耗时。3450版本开始废弃~~
                //.httpStack(new MyOkStack3())//自定义网络库，demo中给出了okhttp3版本的样例，其余请自行开发或者咨询工作人员。
                .build(), new TTAdSdk.InitCallback() {
            @Override
            public void success() {
                TTADManager.this.aDListener.Success();
            }

            @Override
            public void fail(int i, String s) {
                TTADManager.this.aDListener.Failed(s);
            }
        });
    }

    private TTAdNative mTTAdNative;

    @Override
    public void initVideo(Context context, String posID) {
        this.posID = posID;
        mTTAdNative = TTAdSdk.getAdManager().createAdNative(context);
    }

    @Override
    public void setVideoListener(RewardVideoListener rewardVideoListener) {
        this.rewardVideoCallBack = new RewardVideoCallBack(rewardVideoListener);
    }

    @Override
    public void loadRewardedVideoAd() {
        AdSlot adSlot = new AdSlot.Builder()
                .setCodeId(posID)
                .setRewardName("金币") //奖励的名称 选填
                .setRewardAmount(3)  //奖励的数量 选填
                //模板广告需要设置期望个性化模板广告的大小,单位dp,激励视频场景，只要设置的值大于0即可 且仅是模板渲染的代码位ID使用，非模板渲染代码位切勿使用
                .setExpressViewAcceptedSize(500,500)
                .setUserID("tag123")//tag_id
                .setMediaExtra("media_extra") //附加参数
                .setOrientation(TTAdConstant.VERTICAL) //必填参数，期望视频的播放方向：TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
                .build();

//        SDK渲染请求AdSlot
//        AdSlot adSlot = new AdSlot.Builder()
//                .setCodeId(codeId)
//                .setRewardName("金币") //奖励的名称 选填
//                .setRewardAmount(3)  //奖励的数量 选填
//                .setUserID("tag123")//tag_id
//                .setMediaExtra("media_extra") //附加参数
//                .setOrientation(orientation) //必填参数，期望视频的播放方向：TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL
//                .build();

        mTTAdNative.loadRewardVideoAd(adSlot, new TTAdNative.RewardVideoAdListener() {
            //请求广告失败
            @Override
            public void onError(int code, String message) {
                rewardVideoCallBack.onFail(code+"",message);
            }
            //视频广告加载后，视频资源缓存到本地的回调，在此回调后，播放本地视频，流畅不阻塞。
            @Override
            public void onRewardVideoCached() {

            }

            @Override
            public void onRewardVideoCached(TTRewardVideoAd ttRewardVideoAd) {
                //开发者做一个标识
                isVideoReady = true;
//                mttRewardVideoAd = ttRewardVideoAd;
//                rewardVideoCallBack.onReady();
            }

            //视频广告的素材加载完毕，比如视频url等，在此回调后，可以播放在线视频，网络不好可能出现加载缓冲，影响体验。
            @Override
            public void onRewardVideoAdLoad(TTRewardVideoAd ad) {
                //开发者做一个标识
                isVideoReady = true;
                mttRewardVideoAd = ad;
                rewardVideoCallBack.onReady();
                mttRewardVideoAd.setRewardAdInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {

                    @Override
                    public void onAdShow() {
                        ADLogHelper.info("头条-视频广告展示回调");
                        rewardVideoCallBack.onShow();
                    }

                    @Override
                    public void onAdVideoBarClick() {
                        ADLogHelper.info("头条-广告的下载bar点击回调");
                        rewardVideoCallBack.onClicked();
                    }

                    @Override
                    public void onAdClose() {
                        ADLogHelper.info("头条-视频广告关闭回调");
                        rewardVideoCallBack.onClose();
                    }

                    //视频播放完成回调
                    @Override
                    public void onVideoComplete() {
                        ADLogHelper.info("头条-视频播放完成回调");
                    }

                    @Override
                    public void onVideoError() {
                        ADLogHelper.info("头条-视频广告播放错误回调");
                        rewardVideoCallBack.onFail("1","播放错误");
                    }

                    //视频播放完成后，奖励验证回调，rewardVerify：是否有效，rewardAmount：奖励梳理，rewardName：奖励名称
                    @Override
                    public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int errorCode, String errorMsg) {
                        ADLogHelper.info("头条-视频播放完成后，奖励验证回调，("+rewardVerify+"：是否有效)，("+rewardAmount+"：奖励数量)，("+rewardName+"：奖励名称)，("
                                +errorCode+"：错误码)，("+errorMsg+"：错误信息)");
                        rewardVideoCallBack.onReward();
                    }

                    @Override
                    public void onSkippedVideo() {
                        ADLogHelper.info("头条-视频广告跳过回调");
                    }
                });

//                mttRewardVideoAd.setRewardPlayAgainInteractionListener(new TTRewardVideoAd.RewardAdInteractionListener() {
//                    @Override
//                    public void onAdShow() {
//                        ADLogHelper.info("============================================onAdShow++++++++++");
//                    }
//
//                    @Override
//                    public void onAdVideoBarClick() {
//                        ADLogHelper.info("============================================onAdVideoBarClickw++++++++++");
//                    }
//
//                    @Override
//                    public void onAdClose() {
//                        ADLogHelper.info("============================================onAdClose++++++++++");
//                    }
//
//                    //视频播放完成回调
//                    @Override
//                    public void onVideoComplete() {
//                        ADLogHelper.info("============================================onVideoComplete++++++++++");
//                    }
//
//                    @Override
//                    public void onVideoError() {
//
//                    }
//
//                    //视频播放完成后，奖励验证回调，rewardVerify：是否有效，rewardAmount：奖励梳理，rewardName：奖励名称
//                    @Override
//                    public void onRewardVerify(boolean rewardVerify, int rewardAmount, String rewardName, int errorCode, String errorMsg) {
//                        String logString = "rewardPlayAgain verify:" + rewardVerify + " amount:" + rewardAmount +
//                                " name:" + rewardName + " errorCode:" + errorCode + " errorMsg:" + errorMsg;
//                        ADLogHelper.info("============================================onRewardVerify++++++++++");
//                    }
//
//                    @Override
//                    public void onSkippedVideo() {
//
//                    }
//                });

                mttRewardVideoAd.setDownloadListener(new TTAppDownloadListener() {
                    @Override
                    public void onIdle() {// 未开始下载
                        ADLogHelper.info("头条-未开始下载");
                    }

                    @Override
                    public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {// 下载中
                        ADLogHelper.info("头条-下载中");
                    }

                    @Override
                    public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {//下载暂停回调
                        ADLogHelper.info("头条-下载暂停回调");
                    }

                    @Override
                    public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {//下载失败回调
                        ADLogHelper.info("头条-下载失败回调");
                    }

                    @Override
                    public void onDownloadFinished(long totalBytes, String fileName, String appName) {//下载完成回调
                        ADLogHelper.info("头条-下载完成回调");
                    }

                    @Override
                    public void onInstalled(String fileName, String appName) {//安装完成回调
                        ADLogHelper.info("头条-安装完成回调");
                    }
                });
            }
        });
    }

    @Override
    public void showRewardVideoAD() {

        //展示广告，并传入广告展示的场景
        mttRewardVideoAd.showRewardVideoAd(this.mActivity, TTAdConstant.RitScenes.CUSTOMIZE_SCENES, "scenes_test");
        mttRewardVideoAd = null;
    }
}
